/**
 */
package fUML.Semantics.Classes.Kernel;

import fUML.Syntax.Classes.Kernel.Operation;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Redefinition Based Dispatch Strategy</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * A redefinition-based dispatch strategy is one that requires:
 *  - each
 *                 non-abstract operation to have exactly one method 
 *  - an overriding subclass
 *                 operation to explicitly redefine the overridden superclass operation.
 * <!-- end-model-doc -->
 *
 *
 * @see fUML.Semantics.Classes.Kernel.KernelPackage#getRedefinitionBasedDispatchStrategy()
 * @model
 * @generated
 */
public interface RedefinitionBasedDispatchStrategy extends DispatchStrategy {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * <!-- begin-model-doc -->
	 * // Check if the owned operation is equal to or a redefinition (directly or
	 *                   indirectly) of the base operation.
	 *  
	 *  boolean matches =
	 *                   false;
	 *  if (ownedOperation == baseOperation) {
	 *  matches =
	 *                   true;
	 *  } else {
	 *  int i = 1;
	 *  while (!matches & i
	 *                   <= ownedOperation.redefinedOperation.size()) {
	 *  matches =
	 *                   this.operationsMatch(ownedOperation.redefinedOperation.getValue(i-1),
	 *                   baseOperation);
	 *  i = i + 1;
	 *  }
	 *  }
	 *  
	 *                   return matches;
	 *  
	 * <!-- end-model-doc -->
	 * @model required="true" ordered="false" ownedOperationRequired="true" ownedOperationOrdered="false" baseOperationRequired="true" baseOperationOrdered="false"
	 * @generated
	 */
	boolean operationsMatch(Operation ownedOperation, Operation baseOperation);

} // RedefinitionBasedDispatchStrategy
